// my/pages/Integral/Integral.js
const { getUserId } = require('../../../utils/userManager.js');
const { http } = require('../../../utils/http.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    totalPoints: "",        // 用户总积分
    activeTab: 'income',  // 当前激活的tab：income(收入) 或 expense(支出)
    currentList: [],      // 当前显示的积分明细列表
    incomeList: [],       // 收入明细列表
    expenseList: [],      // 支出明细列表
    loading: false,       // 加载状态
    // 分页相关参数
    pageNum: 1,           // 当前页码
    pageSize: 10,         // 每页大小
    total: 0,             // 总记录数
    hasMore: true,        // 是否还有更多数据
    currentType: 1        // 当前查询类型：1-收入，0-支出
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const userId = getUserId();
    if (!userId) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      return;
    }
    // 页面加载时获取用户总积分
    this.getUserTotalPoints();
    this.getPointsListByType(1); // 默认查收入
  },
  /**
   * 获取用户总积分
   * 调用后端接口：GET /points/record/total/{userId}
   */
  getUserTotalPoints() {
    // 获取用户ID
    const userId = getUserId();
    // 显示加载状态
    this.setData({ loading: true });

    // 调用后端接口获取用户总积分
    http.get(`/points/record/total/${userId}`)
      .then(res => {
        console.log('获取用户总积分成功:', res);
        // 隐藏加载状态
        this.setData({ loading: false });

        // 根据您提供的接口格式解析数据
        let totalPoints = 0;

        if (res && res.code === 200) {
          // 接口返回成功，直接使用data字段作为总积分
          totalPoints = res.data || 0;
        } else {
          // 接口返回异常，显示错误信息
          const errorMsg = res.msg || '获取积分数据失败';
          wx.showToast({
            title: errorMsg,
            icon: 'none',
            duration: 2000
          });
          return;
        }
        // 更新总积分数据
        this.setData({
          totalPoints: totalPoints
        });
      })
      .catch(err => {
        console.error('获取用户总积分失败:', err);
        // 隐藏加载状态
        this.setData({ loading: false });
        // 显示错误信息
        let errorMessage = '获取积分数据失败';
        if (err.msg) {
          errorMessage = err.msg;
        }
        wx.showToast({
          title: errorMessage,
          icon: 'none',
          duration: 2000
        });
      });
  },
  
  // 获取积分明细列表
  getPointsListByType(type, pageNum = 1, isLoadMore = false) {
    const userId = getUserId();
    if (!userId) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      return;
    }
    
    // 设置加载状态
    this.setData({ loading: true });
    
    // 构建分页参数
    const params = {
      userId: userId,
      type: type,
      pageNum: pageNum,
      pageSize: this.data.pageSize
    };
    
    http.get('/points/record/list', params)
      .then(res => {
        this.setData({ loading: false });
        
        if (res && res.code === 200) {
          // 若依框架返回格式：{ code: 200, rows: [], total: 100 }
          const list = res.rows || [];
          const total = res.total || 0;
          
          // 如果是加载更多，则追加数据；否则替换数据
          let newList = [];
          if (isLoadMore && pageNum > 1) {
            newList = [...this.data.currentList, ...list];
          } else {
            newList = list;
          }
          
          // 计算是否还有更多数据
          const hasMore = (pageNum * this.data.pageSize) < total;
          
          this.setData({ 
            currentList: newList,
            pageNum: pageNum,
            total: total,
            hasMore: hasMore,
            currentType: type
          });
          
          // 根据类型保存到对应的列表中
          if (type === 1) {
            this.setData({ incomeList: newList });
          } else {
            this.setData({ expenseList: newList });
          }
          
          console.log('积分明细数据:', newList, '总数:', total, '当前页:', pageNum);
        } else {
          wx.showToast({ title: res.msg || '获取明细失败', icon: 'none' });
          
          if (!isLoadMore) {
            this.setData({
              currentList: [],
              total: 0,
              hasMore: false
            });
          }
        }
      })
      .catch(() => {
        this.setData({ loading: false });
        wx.showToast({ title: '获取明细失败', icon: 'none' });
        
        if (!isLoadMore) {
          this.setData({
            currentList: [],
            total: 0,
            hasMore: false
          });
        }
      });
  },

  /**
   * 切换Tab标签
   * @param {Object} e - 事件对象
   */
  switchTab(e) {
    const tab = e.currentTarget.dataset.tab;
    if (tab === this.data.activeTab) return;
    
    let type = tab === 'income' ? 1 : 0;
    
    // 重置分页参数
    this.setData({ 
      activeTab: tab,
      pageNum: 1,
      hasMore: true
    });
    
    this.getPointsListByType(type, 1, false);
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次页面显示时可以刷新数据
    // this.getUserPointsInfo();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 重置分页参数
    this.setData({
      pageNum: 1,
      hasMore: true
    });
    
    // 重新获取数据
    this.getUserTotalPoints();
    this.getPointsListByType(this.data.currentType, 1, false);

    // 停止下拉刷新
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 实现加载更多积分明细的功能
    if (this.data.hasMore && !this.data.loading) {
      const nextPage = this.data.pageNum + 1;
      this.getPointsListByType(this.data.currentType, nextPage, true);
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '我的积分',
      path: '/my/pages/Integral/Integral'
    };
  }
})